package es.masterd.e11_2;

import java.io.IOException;

import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.widget.CompoundButton.OnCheckedChangeListener;

public class GrabadoraActivity extends Activity implements
		OnCheckedChangeListener, OnCompletionListener {
	private static final String FICHERO = Environment.getExternalStorageDirectory() + "/test2.3gp";
	private MediaRecorder grabadora;
	private MediaPlayer reproductor;
	private ToggleButton botonRec;

	/** Called when the activity is first created. */
	
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		botonRec = (ToggleButton) findViewById(R.id.rec);
		botonRec.setOnCheckedChangeListener(this);
	}
	
	
	public void onStart() {
		super.onStart();
		botonRec.setEnabled(true);
		botonRec.setChecked(false);
	}
	
	
	public void onStop() {
		botonRec.setEnabled(true);
		botonRec.setChecked(false);
		super.onStop();
	}

	
	public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
		try {
			if (isChecked) {
				grabar();
			} else {
				pararGrabar();
				reproducir();
			}
		} catch (Exception e) {
			Toast.makeText(GrabadoraActivity.this, e.getMessage(), Toast.LENGTH_LONG).show();
			e.printStackTrace();
		}
	}

	protected void grabar() throws IllegalStateException, IOException {
		grabadora = new MediaRecorder();
	
		Log.d("grabadora", "grabando" + FICHERO);
		
		// Audio source
		grabadora.setAudioSource(MediaRecorder.AudioSource.MIC);
		// formato de salida
		grabadora.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
		grabadora.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
		
		grabadora.setOutputFile(FICHERO);
		
		grabadora.prepare();
		grabadora.start();
	}

	protected void pararGrabar() {
		Log.d("grabadora","parar");
		
		grabadora.stop();
		grabadora.release();
		grabadora = null;
	}

	protected void reproducir() throws IllegalArgumentException, IllegalStateException, IOException {
		Log.d("grabadora","reproduciendo");
		
		if (reproductor != null) {
			reproductor.release();
		}

		botonRec.setEnabled(false);
		
		reproductor = new MediaPlayer();
		reproductor.setDataSource(FICHERO);
		reproductor.prepare();
		reproductor.start();
		
		reproductor.setOnCompletionListener(this);
	}

	/**
	 * Cuando se termine de reproducir 
	 * volvemos a activar el boton y liberamos el reproductor
	 */
	
	public void onCompletion(MediaPlayer mp) {
		botonRec.setEnabled(true);
		
		reproductor.release();
	}
}